//
//  LBStatusPictureView.swift
//  LBNewWeiBo
//
//  Created by bin on 15/11/2.
//  Copyright © 2015年 bin. All rights reserved.
//

import UIKit

/// 配图类视图
class LBStatusPictureView: UICollectionView {

    //MARK: - 属性
    private let LBStatusPictureViewIdentifier = "LBStatusPictureViewCell"
    
    /// 模型
    var status: LBStatus? {
        didSet {
            // 刷新
            reloadData()
        }
    }
    
    /// 根据微博模型计算配图的尺寸
    func calcViewSize() ->CGSize {
        
        // 每一项的Size
        let itemSize = CGSize(width: 90, height: 90)
        // 设置layout的每一项
        layout.itemSize = itemSize
        layout.minimumLineSpacing = 0 //默认间距
        layout.minimumInteritemSpacing = 0

        /// 获取图片的数目
       let count = status?.pic_urls?.count ?? 0
        
        // 1.没有图片
        if count == 0 {
            return CGSizeZero // 0
        }
        
        // 2.单张图片
        if count == 1 {
            let oneItemSize = CGSizeMake(150, 120)
            layout.itemSize = oneItemSize
            return oneItemSize
        }
        
        // 总列数
        let column = 3
        // 间距
        let margin: CGFloat = 10.0
        
        layout.minimumLineSpacing = margin
        layout.minimumLineSpacing = margin
        
        // 3. 4张图片
        if count == 4 {
            
            let size = (layout.itemSize.width * 2) + margin
            return CGSizeMake(size, size)
        }
        
        // 2.3.5.6.7.8.9
        // 计算行数 公式: 行数 = (图片数量 + 列数 -1) / 列数
        let row = (count + column - 1) / column
        // 计算宽度 
        let widht = CGFloat(column) * itemSize.width + CGFloat(column - 1) * margin
        // 计算高度
        let height = (CGFloat(row) * itemSize.height) + (CGFloat(row) - 1) * margin
        
        return CGSizeMake(widht, height)
        
    }
    
    //MARK: - 创建收集布局
    private var layout = UICollectionViewFlowLayout()
    
    //MARK: - 构造函数
    init() {
        // 初始化父类方法
        super.init(frame: CGRectZero, collectionViewLayout: layout)
    
        // 设置数据源
        dataSource = self
        
        // 注册cell
        registerClass(LBStatusPictureCell.self, forCellWithReuseIdentifier: LBStatusPictureViewIdentifier)
        
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

// mark: - 扩展 LBStatusPictureView 实现 UICollectionViewCell

extension LBStatusPictureView:UICollectionViewDataSource {
    
    /// 实现数据源方法
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return status?.pic_urls?.count ?? 0
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        
        // 创建cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(LBStatusPictureViewIdentifier, forIndexPath: indexPath) as! LBStatusPictureCell
        
        // url
        let urlStr = status?.pic_urls?[indexPath.item]["thumbnail_pic"] as? String
        
        // 赋值给cell的配图属性
        cell.imageUrl = NSURL(string: urlStr!)
        
        return cell
        
    }
    
}

/// 自定义cell 显示配图内容
class LBStatusPictureCell: UICollectionViewCell {
    
    //MARK: - 属性
    var imageUrl: NSURL? {
        didSet{
            
            // 为配图赋值
            iconView.lb_setImageWithURL(imageUrl)
        }
    }
    
    //MARK: - 构造方法
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        // 准备UI
        prepareUI()
    }
    
    //MARK: - 准备UI
    private func prepareUI() {
        
        // 添加子控件
        contentView.addSubview(iconView)
        
        // 填充
        iconView.ff_Fill(iconView)
        
    }
    
    
    //MARK: - 懒加载
    lazy var iconView: UIImageView = UIImageView()
}
